// V8

// 主流javascript执行引擎
// 采用即时编译
// 内存设限
// 32位下不超800M
// 64 位1.5G

// 垃圾回收策略
// 采用分代回收的思想
// 内存分为新生代和老生代
// 针对不同对象采用不同算法

// V8常见的GC算法
// 分代回收
// 空间复制
// 标记清除
// 标记整理
// 标记增量


// 回收新生代对象
// 内存一分为2
// 小空间用于存储新生代对象（32M|16M）
// 新生代指的是存活时间较短的对象

// 新生代对象回收实现
// 回收过程采用复制算法 + 标记整理
// 新生代内存分为两个大小相等的空间
// 使用空间为From， 空闲空间构建为To
// 活动对象存储于From 空间
// 标记整理后将活动对象拷贝至To
// From 与 To 交换空间完成释放

// 回收细节说明
// 拷贝过程中可能出现晋升
// 晋升就是将新生代对象移动至老生代
// 一轮GC还存活的新生代需要晋升
// To 空间的使用率超过25%



// 回收老生代
// 老生代对象放在右侧老生代区域
// 64 位操作系统1.4G， 32操作系统700M
// 老生代对象指的就是存活时间较长的对象

// 老生代回收实现
// 采用标记清除、标记整理、标记增量算法
// 首先使用标记清除完成垃圾空间的回收
// 采用标记整理进行空间优化
// 采用增量标记进行效率优化

// 新老对比
// 新生代区域垃圾回收使用空间换时间
// 老生代区域垃圾回收不适合复制算法实现

